home *** CD-ROM | disk | FTP | other *** search
/ Nebula 1 / Nebula One.iso / Graphics / PostScript / Pencil / pencilDefinitions.ps < prev    next >
Encoding:
Text File  |  1995-06-12  |  13.8 KB  |  700 lines

  1. % PENCIL printing Package
  2. % general procedures
  3. % calculate bounding box of filled path
  4. /fbb {
  5. gsave
  6. initmatrix
  7. newpath cp
  8. pathbbox
  9. grestore
  10. } def
  11. % calculate bounding box of filled&stroked path
  12. /fsbb {
  13. fbb /ury exch def /urx exch def /lly exch def /llx exch def
  14. /linw linw 1 add def
  15. llx linw sub lly linw sub urx linw add ury linw add
  16. } def
  17. % take bounding box on the stack and enlarge it in each of the four directions
  18. /enlbb {
  19. /dury exch def /durx exch def /dlly exch def /dllx exch def
  20. /ury exch def /urx exch def /lly exch def /llx exch def
  21. llx dllx add lly dlly add urx durx add ury dury add
  22. } def
  23.  
  24. % path procedures
  25. /circle {
  26.     nctrl 2 ge {
  27.         /x ctrl 0 get def
  28.         /y ctrl 1 get def
  29.         nctrl 3 ge {
  30.         matrix currentmatrix
  31.         x y translate
  32.         1 ctrl 5 get y sub ctrl 2 get x sub div scale 
  33.         0 0
  34.         ctrl 2 get x sub
  35.         0 360 arc closepath
  36.         setmatrix
  37.         } {
  38.         x y
  39.         ctrl 2 get x sub 2 exp
  40.         ctrl 3 get y sub 2 exp add sqrt
  41.         0 360 arc closepath } ifelse
  42.         } {
  43.          nctrl 1 eq {
  44.         ctrl 0 get
  45.         ctrl 1 get
  46.         20
  47.         0 360 arc closepath
  48.         } {
  49.         0 0 moveto
  50.         } ifelse
  51.     } ifelse
  52. } def
  53.  
  54. /font (Helvetica) def
  55. /fontsize 24 def
  56. /text () def
  57.  
  58. /charP {
  59.     udt
  60.     nctrl 1 ge {
  61.     ctrl 0 get ctrl 1 get moveto
  62.     font findfont fontsize scalefont setfont
  63.     text false charpath
  64.     } if
  65.     /font (Helvetica) def
  66.     /fontsize 24 def
  67.     /text () def
  68. } def
  69.  
  70. /function { 0 } def
  71. /funcP {
  72. udt
  73. nctrl 2 ge {
  74. nctrl 4 ge {
  75. /ox ctrl 4 get def /oy ctrl 5 get def
  76. /sx ctrl 6 get ox sub def /sy ctrl 7 get oy sub def
  77. /stx ctrl 0 get ox sub sx div def
  78. /endx ctrl 2 get ox sub sx div def
  79. } {
  80. /ox ctrl 0 get def /oy ctrl 1 get def
  81. /stx 0 def /sx 1 def /sy 1 def /endx ctrl 2 get ctrl 0 get sub def
  82. } ifelse
  83. /x stx def ox x sx mul add oy function sy mul add moveto
  84. /res 2 sx div def
  85. stx res add res endx { /x exch def
  86. ox x sx mul add oy function sy mul add lineto
  87. } for
  88. } { 0 0 moveto } ifelse
  89. /function { 0 } def
  90. } def
  91.  
  92. /hermite {
  93. nctrl 4 ge {
  94. ctrl 0 get ctrl 1 get moveto
  95. 0 1 nctrl 2 div cvi 2 sub { /i exch 4 mul def
  96. ctrl i 2 add get ctrl i 3 add get
  97. ctrl i 4 add get 2 mul ctrl i 6 add get sub ctrl i 5 add get 2 mul ctrl i 7 add get sub
  98. ctrl i 4 add get ctrl i 5 add get curveto
  99. } for
  100. ctrl nctrl 1 sub 2 mul get ctrl nctrl 1 sub 2 mul 1 add get
  101. ctrl 0 get 2 mul ctrl 2 get sub ctrl 1 get 2 mul ctrl 3 get sub
  102. ctrl 0 get ctrl 1 get curveto
  103. closepath
  104. } { 0 0 moveto } ifelse
  105. } def
  106.  
  107. /hermiteO {
  108. nctrl 4 ge {
  109. ctrl 0 get ctrl 1 get moveto
  110. 0 1 nctrl 2 div cvi 2 sub { /i exch 4 mul def
  111. ctrl i 2 add get ctrl i 3 add get
  112. ctrl i 4 add get 2 mul ctrl i 6 add get sub ctrl i 5 add get 2 mul ctrl i 7 add get sub
  113. ctrl i 4 add get ctrl i 5 add get curveto
  114. } for
  115. } { 0 0 moveto } ifelse
  116. } def
  117.  
  118.  
  119. % Bezier curve (2 rulers per point)
  120.  
  121. /bezierOld {
  122. nctrl 6 ge {
  123. ctrl 0 get ctrl 1 get moveto
  124. 0 1 nctrl 3 div cvi 2 sub { /i exch 6 mul def
  125. ctrl i 2 add get ctrl i 3 add get
  126. ctrl i 4 add get ctrl i 5 add get
  127. ctrl i 6 add get ctrl i 7 add get curveto
  128. } for
  129. ctrl nctrl 2 sub 2 mul get ctrl nctrl 2 sub 2 mul 1 add get
  130. ctrl nctrl 1 sub 2 mul get ctrl nctrl 1 sub 2 mul 1 add get
  131. ctrl 0 get ctrl 1 get curveto
  132. closepath
  133. } { 0 0 moveto } ifelse
  134. } def
  135.  
  136. /bezier {
  137. nctrl 4 ge {
  138. ctrl 0 get ctrl 1 get moveto
  139. 0 1 nctrl 2 add 3 div cvi 2 sub { /i exch 6 mul def
  140. ctrl i 2 add get ctrl i 3 add get
  141. ctrl i 4 add get ctrl i 5 add get
  142. ctrl i 6 add get ctrl i 7 add get curveto
  143. } for
  144. /N nctrl 3 sub 3 div cvi 3 mul def
  145. N nctrl 3 sub eq {
  146. /N N 1 add 2 mul def
  147. ctrl N get ctrl N 1 add get
  148. ctrl N 2 add get ctrl N 3 add get
  149. ctrl 0 get ctrl 1 get curveto
  150. } if
  151. closepath
  152. } { 0 0 moveto } ifelse
  153. } def
  154.  
  155. /bezierO {
  156. nctrl 4 ge {
  157. ctrl 0 get ctrl 1 get moveto
  158. 0 1 nctrl 2 add 3 div cvi 2 sub { /i exch 6 mul def
  159. ctrl i 2 add get ctrl i 3 add get
  160. ctrl i 4 add get ctrl i 5 add get
  161. ctrl i 6 add get ctrl i 7 add get curveto
  162. } for
  163. } { 0 0 moveto } ifelse
  164. } def
  165.  
  166. /rect {
  167.     nctrl 2 ge {
  168.         /x1 ctrl 0 get def /y1 ctrl 1 get def /x2 ctrl 2 get def /y2 ctrl 3 get def
  169.         x1 y1 moveto x2 y1 lineto x2 y2 lineto x1 y2 lineto closepath
  170.     } { 0 0 moveto } ifelse
  171. } def
  172.  
  173. /rectwin {
  174.     nctrl 2 ge {
  175.         /x1 ctrl 0 get def /y1 ctrl 1 get def /x2 ctrl 2 get def /y2 ctrl 3 get def
  176.         x1 y1 moveto x2 y1 lineto x2 y2 lineto x1 y2 lineto closepath
  177.         nctrl 3 ge {
  178.         /dx ctrl 2 get ctrl 4 get sub def /dy ctrl 3 get ctrl 5 get sub  def
  179.         x1 dx add y1 dy add moveto x1 dx add y2 dy sub lineto x2 dx sub y2 dy sub lineto x2 dx sub y1 dy add lineto closepath
  180.         } if
  181.     } { 0 0 moveto } ifelse
  182. } def
  183.  
  184. /polygon {
  185.     nctrl 2 ge {
  186.         ctrl 0 get ctrl 1 get moveto
  187.         1 1 nctrl 1 sub { /i exch 2 mul def
  188.         ctrl i get ctrl i 1 add get lineto } for
  189.         closepath
  190.     } { 0 0 moveto } ifelse
  191. } def
  192.  
  193. /polygonO {
  194.     nctrl 2 ge {
  195.         ctrl 0 get ctrl 1 get moveto
  196.         1 1 nctrl 1 sub { /i exch 2 mul def
  197.         ctrl i get ctrl i 1 add get lineto } for
  198.     } { 0 0 moveto } ifelse
  199. } def
  200.  
  201. /arcP {
  202.     nctrl 3 ge {
  203.         /x ctrl 0 get def /y ctrl 1 get def
  204.         x y moveto
  205.         x y
  206.         /dx1 ctrl 2 get x sub def
  207.         /dy1 ctrl 3 get y sub def
  208.         /dx2 ctrl 4 get x sub def
  209.         /dy2 ctrl 5 get y sub def
  210.         dx1 2 exp dy1 2 exp add sqrt
  211.         dy1 dx1 atan
  212.         dy2 dx2 atan
  213.         arc closepath
  214.     } { 0 0 moveto } ifelse
  215. } def
  216.  
  217. /arcPO {
  218.     nctrl 3 ge {
  219.         /x ctrl 0 get def /y ctrl 1 get def
  220.         x y
  221.         /dx1 ctrl 2 get x sub def
  222.         /dy1 ctrl 3 get y sub def
  223.         /dx2 ctrl 4 get x sub def
  224.         /dy2 ctrl 5 get y sub def
  225.         dx1 2 exp dy1 2 exp add sqrt
  226.         dy1 dx1 atan
  227.         dy2 dx2 atan
  228.         arc
  229.     } { 0 0 moveto } ifelse
  230. } def
  231.  
  232. /csize 10 def
  233. /rrect {
  234.     udt
  235.     nctrl 2 ge {
  236.     /x1 ctrl 0 get def /y1 ctrl 1 get def /x2 ctrl 2 get def /y2 ctrl 3 get def
  237.     x2 csize sub y1 csize add csize -90 0 arc
  238.     x2 csize sub y2 csize sub csize 0 90 arc
  239.     x1 csize add y2 csize sub csize 90 180 arc
  240.     x1 csize add y1 csize add csize 180 270 arc closepath
  241.     } { 0 0 moveto } ifelse
  242.     /csize 10 def
  243. } def
  244.  
  245. % drawing methods
  246. /drawFS {
  247.     cl setrgbcolor
  248.     cp
  249.     gsave
  250.     cfl
  251.     grestore
  252.     setrgbcolor
  253.     cst
  254. } def
  255. /drawFSBB { fsbb } def
  256.  
  257. /drawS {
  258.     cl pop pop pop setrgbcolor
  259.     cp
  260.     cst
  261. } def
  262. /drawSBB { fsbb } def
  263.  
  264. /drawF {
  265.     cl setrgbcolor
  266.     cp
  267.     cfl
  268.     pop pop pop
  269. } def
  270. /drawFBB { fbb } def
  271.  
  272. /draw3D {
  273.     cl setrgbcolor pop pop pop
  274.     gsave
  275.     -2 2 translate
  276.     currenthsbcolor pop pop .5 1 sethsbcolor
  277.     cp fill
  278.     grestore
  279.     gsave
  280.     2 -2 translate
  281.     currenthsbcolor pop .2 sethsbcolor
  282.     cp fill
  283.     grestore
  284.     cp cfl
  285. } def
  286. /draw3DBB { fsbb } def
  287.  
  288. /draw3DShadow {
  289.     cl setrgbcolor
  290.     gsave
  291.     5 -5 translate
  292.     .3 setgray
  293.     cp fill
  294.     grestore
  295.     gsave
  296.     -2 2 translate
  297.     currenthsbcolor pop pop .5 1 sethsbcolor
  298.     cp fill
  299.     grestore
  300.     gsave
  301.     2 -2 translate
  302.     currenthsbcolor pop .2 sethsbcolor
  303.     cp fill
  304.     grestore
  305.     cp cfl
  306. } def
  307. /draw3DShadowBB { fsbb 0 -5 5 0 enlbb } def
  308.  
  309. /shadowgray .2 def
  310. /drawFSShadow {
  311.     gsave
  312.     5 -5 translate
  313.     udt shadowgray setgray /shadowgray .2 def
  314.     cp
  315.     fill
  316.     grestore
  317.     cl setrgbcolor
  318.     cp
  319.     gsave
  320.     cfl
  321.     grestore
  322.     setrgbcolor
  323.     cst
  324. } def
  325. /drawFSShadowBB { fsbb 0 -5 5 0 enlbb } def
  326.  
  327. /drawSShadow {
  328.     gsave
  329.     5 -5 translate
  330.     udt shadowgray setgray /shadowgray .2 def
  331.     cp
  332.     cst
  333.     grestore
  334.     cl pop pop pop setrgbcolor
  335.     cp
  336.     cst
  337. } def
  338. /drawSShadowBB { fsbb 0 -5 5 0 enlbb } def
  339.  
  340. /drawFShadow {
  341.     gsave
  342.     5 -5 translate
  343.     udt shadowgray setgray /shadowgray .2 def
  344.     cp
  345.     fill
  346.     grestore
  347.     cl setrgbcolor pop pop pop
  348.     cp
  349.     cfl
  350. } def
  351. /drawFShadowBB { fbb 0 -5 5 0 enlbb } def
  352.  
  353. /drawV {
  354.     gsave
  355.     cl [/r1 /g1 /b1 /r2 /g2 /b2] SET
  356. /r2 r2 r1 sub def
  357. /g2 g2 g1 sub def
  358. /b2 b2 b1 sub def
  359.     0 qual 3 div 10 { /t exch 10 div def
  360.     r1 t r2 mul add g1 t g2 mul add b1 t b2 mul add setrgbcolor
  361.     cp fill
  362.     0 qual 3 div translate
  363.     } for
  364.     cp cfl
  365.     grestore
  366. } def
  367. /drawVBB { fbb 0 0 0 10 enlbb } def
  368.  
  369. /drawVD {
  370.     gsave
  371.     cl [/r1 /g1 /b1 /r2 /g2 /b2] SET
  372. /r2 r2 r1 sub def
  373. /g2 g2 g1 sub def
  374. /b2 b2 b1 sub def
  375.     0 qual 3 div 10 { /t exch 10 div def
  376.     r1 t r2 mul add g1 t g2 mul add b1 t b2 mul add setrgbcolor
  377.     cp fill
  378.     0 qual 3 div neg translate
  379.     } for
  380.     cp cfl
  381.     grestore
  382. } def
  383. /drawVDBB { fbb 0 -10 0 0 enlbb } def
  384.  
  385. /drawVS {
  386.     gsave
  387.     cl [/r1 /g1 /b1 /r2 /g2 /b2] SET
  388. /r2 r2 r1 sub def
  389. /g2 g2 g1 sub def
  390. /b2 b2 b1 sub def
  391.     0 qual 3 div 10 { /t exch 10 div def
  392.     r1 t r2 mul add g1 t g2 mul add b1 t b2 mul add setrgbcolor
  393.     cp fill
  394.     qual 3 div dup translate
  395.     } for
  396.     cp cfl
  397.     grestore
  398. } def
  399. /drawVSBB { fbb 0 0 10 10 enlbb } def
  400.  
  401. /drawV3D {
  402.     gsave
  403.     cl [/r1 /g1 /b1 /r2 /g2 /b2] SET
  404. /r2 r2 r1 sub def
  405. /g2 g2 g1 sub def
  406. /b2 b2 b1 sub def
  407.     10 -10 translate
  408.     0 qual 3 div 9.9 { /t exch 10 div def
  409.     r1 t r2 mul add g1 t g2 mul add b1 t b2 mul add setrgbcolor
  410.     cp fill
  411.     qual -3 div dup neg translate
  412.     } for
  413.     cl [/r2 /g2 /b2] SET pop pop pop
  414. /r2 r2 1 sub def
  415. /g2 g2 1 sub def
  416. /b2 b2 1 sub def
  417.     -10 10 translate
  418.     0 qual 3 div 9.9 { /t exch 10 div def
  419.     1 t r2 mul add 1 t g2 mul add 1 t b2 mul add setrgbcolor
  420.     cp fill
  421.     qual 3 div dup neg translate
  422.     } for
  423.     r2 1 add g2 1 add b2 1 add setrgbcolor cp cfl
  424.     grestore
  425. } def
  426. /drawV3DBB { fbb -10 -10 10 10 enlbb } def
  427.  
  428. /drawV3D2 {
  429.     gsave
  430.     cl [/r1 /g1 /b1 /r2 /g2 /b2] SET
  431. /r2 r2 r1 sub def
  432. /g2 g2 g1 sub def
  433. /b2 b2 b1 sub def
  434.     13 -13 translate
  435.     /qual3 qual 3 div def
  436.     0 qual3 3 { /t exch 1 exch 3 div sub def
  437.     r1 r2 t mul add g1 g2 t mul add b1 b2 t mul add setrgbcolor
  438.     cp fill
  439.     qual3 neg dup neg translate
  440.     } for
  441.     0 qual3 9.9 { /t exch 10 div def
  442.     r1 t r2 mul add g1 t g2 mul add b1 t b2 mul add setrgbcolor
  443.     cp fill
  444.     qual3 neg dup neg translate
  445.     } for
  446.     cl [/r2 /g2 /b2] SET pop pop pop
  447. /r2 r2 1 sub def
  448. /g2 g2 1 sub def
  449. /b2 b2 1 sub def
  450.     -10 10 translate
  451.     0 qual3 9.9 { /t exch 10 div def
  452.     1 t r2 mul add 1 t g2 mul add 1 t b2 mul add setrgbcolor
  453.     cp fill
  454.     qual3 dup neg translate
  455.     } for
  456.     grestore
  457.     r2 1 add g2 1 add b2 1 add setrgbcolor cp cfl
  458. } def
  459. /drawV3D2BB { fbb -10 -13 13 10 enlbb } def
  460.  
  461. /drawN3D {
  462.     cl setrgbcolor pop pop pop
  463.     gsave
  464.     -5 5 translate
  465.     currenthsbcolor pop pop .5 1 sethsbcolor
  466.     cp fill
  467.     grestore
  468.     gsave
  469.     5 -5 translate
  470.     currenthsbcolor pop .2 sethsbcolor
  471.     cp fill
  472.     grestore
  473.     cp cfl
  474. } def
  475. /drawN3DBB { fbb -5 -5 5 5 enlbb } def
  476.  
  477. /drawSF {
  478. cl 6 3 roll setrgbcolor
  479. cp gsave cst grestore
  480. setrgbcolor cfl
  481. } def
  482. /drawSFBB { fsbb } def
  483.  
  484. % stroke methods
  485. /dashpattern [5 5] def
  486. /dashed {
  487.     udt
  488.     dashpattern 0 setdash
  489.     stroke
  490.     [] 0 setdash
  491.     /dashpattern [5 5] def
  492. } def
  493.  
  494. /doubleline {
  495.     gsave currentlinewidth 2 mul setlinewidth stroke grestore
  496.     1 setgray stroke
  497. } def
  498.  
  499. /gstroke {
  500. /lw currentlinewidth def
  501. cl [/r1 /g1 /b1 /r2 /g2 /b2] SET
  502. /r1 r1 r2 sub def
  503. /g1 g1 g2 sub def
  504. /b1 b1 b2 sub def
  505. 1 -.1 0 { /t exch def
  506. t lw mul setlinewidth
  507. r2 r1 t mul add g2 g1 t mul add b2 b1 t mul add setrgbcolor
  508. gsave stroke grestore
  509. } for
  510. newpath
  511. } def
  512.  
  513. % fill methods
  514. /qual 1 def
  515.  
  516. /spektrum {
  517. qual 30 verlaufFILL
  518. } def
  519.  
  520. /SET {
  521. /ar exch def
  522. ar length 1 sub -1 0 {
  523. ar exch get exch def
  524. } for
  525. } def
  526.  
  527. /doClip {
  528. gsave newpath
  529. initmatrix cp pathbbox grestore
  530. [/llx /lly /urx /ury] SET
  531. gsave
  532. clip newpath
  533. llx lly translate
  534. /width urx llx sub def
  535. /height ury lly sub def
  536. } def
  537.  
  538. /endClip {
  539. grestore
  540. newpath
  541. } def
  542.  
  543. /gridsize 5 def
  544. /grid {
  545. udt
  546. doClip
  547. 0 gridsize height { 0 exch moveto width 0 rlineto stroke
  548. } for
  549. 0 gridsize width { 0 moveto 0 height rlineto stroke } for
  550. endClip
  551. /gridsize 5 def
  552. } def
  553.  
  554. /horLines {
  555. udt
  556. doClip
  557. 0 gridsize height { 0 exch moveto width 0 rlineto stroke
  558. } for
  559. endClip
  560. /gridsize 5 def
  561. } def
  562.  
  563. /verLines {
  564. udt
  565. doClip
  566. 0 gridsize width { 0 moveto 0 height rlineto stroke } for
  567. endClip
  568. /gridsize 5 def
  569. } def
  570.  
  571. /phiHF 0 def
  572. /dgrad false def
  573. /verlaufHOR {
  574. cl [/r1 /g1 /b1 /r2 /g2 /b2] SET
  575. /r2 r2 r1 sub def
  576. /g2 g2 g1 sub def
  577. /b2 b2 b1 sub def
  578.     gsave newpath
  579.     initmatrix cp pathbbox grestore
  580.      [/llx /lly /urx /ury] SET
  581. gsave
  582. clip
  583. newpath
  584. llx lly translate
  585. /br urx llx sub def
  586. /ho ury lly sub .1 add def
  587. phiHF 0 ne { phiHF neg rotate } if
  588. ho phiHF sin mul neg 0 translate
  589. /le ho phiHF sin mul br phiHF cos mul add def
  590. dgrad {
  591. 0 1 ho phiHF cos mul br phiHF sin mul add qual div .5 add div 2 mul 1.01 { /t exch def
  592. r1 t r2 mul add g1 t g2 mul add b1 t b2 mul add setrgbcolor
  593. 0 0 le qual rectfill 0 qual translate
  594. } for
  595. 0 1 ho phiHF cos mul br phiHF sin mul add qual div .5 add div 2 mul 1.01 { /t exch 1 sub neg def
  596. r1 t r2 mul add g1 t g2 mul add b1 t b2 mul add setrgbcolor
  597. 0 0 le qual rectfill 0 qual translate
  598. } for
  599. } {
  600. 0 1 ho phiHF cos mul br phiHF sin mul add qual div .5 add div 1.01 { /t exch def
  601. r1 t r2 mul add g1 t g2 mul add b1 t b2 mul add setrgbcolor
  602. 0 0 le qual rectfill 0 qual translate
  603. } for
  604. } ifelse
  605. grestore
  606. newpath
  607. /phiHF 0 def
  608. /dgrad false def
  609. } def
  610.  
  611. /verlaufHORD { /cl [ cl 6 3 roll ] cvx def
  612. verlaufHOR
  613. /cl [ cl 6 3 roll ] cvx def } def
  614.  
  615. /verlaufHORLR { /phiHF 90 def verlaufHOR } def
  616. /verlaufHORRL { /phiHF 90 def verlaufHORD } def
  617. /verlaufHORFV { /phiHF 45 def verlaufHOR } def
  618. /verlaufHORTH { /phiHF 30 def verlaufHOR } def
  619. /verlaufHORDOUB { /dgrad true def verlaufHOR } def
  620. /verlaufHORDOUBR { /phiHF 90 def /dgrad true def verlaufHOR } def
  621. /verlaufHORDOUBFV { /phiHF 45 def /dgrad true def verlaufHOR } def
  622.  
  623. /verlaufFILL { /phiHF exch def /st exch def pathbbox /ury exch def /urx exch def /lly exch def /llx exch def
  624. gsave
  625. clip
  626. llx lly translate
  627. /br urx llx sub def
  628. /ho ury lly sub def
  629. phiHF neg rotate
  630. ho phiHF sin mul neg 0 translate
  631. /le ho phiHF sin mul br phiHF cos mul add def
  632. 0 1 ho phiHF cos mul br phiHF sin mul add st div .5 add div 1.01 { /t exch def
  633. t 1 1 sethsbcolor
  634. 0 0 le st rectfill 0 st translate
  635. } for
  636. grestore
  637. newpath
  638. } def
  639.  
  640. /_sphGradPre {  cl [/r1 /g1 /b1 /r2 /g2 /b2] SET
  641. /b2 b2 b1 sub def
  642. /g2 g2 g1 sub def
  643. /r2 r2 r1 sub def
  644. udt
  645.     gsave newpath
  646.     initmatrix cp pathbbox grestore
  647.      [/llx /lly /urx /ury] SET
  648. gsave
  649. clip
  650. llx urx add 2 div lly ury add 2 div translate
  651. /r urx llx sub 2 div def
  652. /n r 1 centerR sub mul qual div cvi 1 add def
  653. /sc centerR 1 n div exp def
  654. /st centerX r mul sc div 1 sc sub mul 1 sc n exp sub div def
  655. } def
  656.  
  657. /centerR .1 def
  658. /centerX .4 def
  659. /sphGrad { 
  660. _sphGradPre
  661. 0 1 n {
  662. /t exch n div def
  663. r1 r2 t mul add
  664. g1 g2 t mul add
  665. b1 b2 t mul add
  666. setrgbcolor
  667. 0 0 r 0 360 arc fill
  668. st neg  st translate
  669. sc dup scale
  670. } for
  671. grestore
  672. newpath
  673. /centerR .1 def
  674. /centerX .4 def
  675. } def
  676.  
  677. /sphGrad2 { /centerR .2 def sphGrad } def
  678. /sphGrad3 { /centerR .3 def /centerX 0 def sphGrad } def
  679.  
  680. /sphGrad4 { 
  681. _sphGradPre
  682. 0 1 n {
  683. /t exch n div 1 sub 2 exp 1 sub neg def
  684. r1 r2 t mul add
  685. g1 g2 t mul add
  686. b1 b2 t mul add
  687. setrgbcolor
  688. 0 0 r 0 360 arc fill
  689. st neg  st translate
  690. sc dup scale
  691. } for
  692. grestore
  693. newpath
  694. /centerR .1 def
  695. /centerX .4 def
  696. } def
  697.  
  698. /sphGrad5 { /centerR .2 def sphGrad4 } def
  699. /sphGrad6 { /centerR .8 def /centerX 0 def sphGrad4 } def
  700. % END PENCIL printing Package